package controller.services;

import java.io.File;
import java.util.List;
import model.PlayModeTypes;
import model.mp3.MP3Info;
import model.mp3.MP3Object;

/**
 * interface for JLayer management service (mp3 manipulation with JLayer
 * functionalities)
 */
public interface JLayerManagerService {

    /**
     * load mp3 file into JLayer 's player object
     *
     * @param mp3File - the mp3 file to load
     */
    void loadFile(File mp3File);

    /**
     * play loaded mp3 file
     */
    void play();

    /**
     * stop loaded mp3 file
     */
    void stop();

    /**
     * pause loaded mp3 file
     */
    void pause();

    /**
     * set volume level
     *
     * @param gain - the volume level (from 0.00 to 1.00)
     */
    void setVolume(Float gain);

    /**
     * set volume on mute
     */
    void mute();

    /**
     * play next song
     */
    void playNextSong();

    /**
     * play previous song
     */
    void playPreviousSong();

    /**
     * set the play mode (REPEAT, NORMAL, SHUFFLE)
     *
     * @param playMode
     */
    void setPlayMode(PlayModeTypes playMode);

    /**
     * set playlist TODO: add playlist as parameter
     */
    void setPlaylist(List<MP3Object> playList);

    /**
     * set preset TODO: add preset as parameter
     */
    void setPreset();

    /**
     * get song info
     *
     * @return - the mp3 infos
     */
    MP3Info getSongInfo();

}
